"""
题目需求：给定一个字符串，判断它是否是回文（正读和反读都相同），忽略大小写和非字母的字符(比如：标点符号、数字、其他符号等)。
示例：
输入："A man, a plan, a canal: Panama"
输出：True（处理后为 "amanaplanacanalpanama"，是回文）

输入："race a car"
输出：False

代码解释：
首先遍历字符串，过滤出所有字母和数字字符，并统一转为小写，存入列表filtered。
使用join方法将列表转为字符串filtered_str，得到预处理后的字符串。
通过比较filtered_str和其反转字符串（[::-1]）判断是否为回文，返回布尔值。
"""
def is_palindrome(s):
    filtered = []
    for char in s:
        # isalnum方法用于判断字符串是否只包含字母（a-z, A-Z）或数字（0-9），且至少包含一个字符。
        if char.isalnum():
            # 转为小写并添加到列表
            filtered.append(char.lower())
    # 将列表转为字符串
    filtered_str = ''.join(filtered)
    # 检查是否为回文（与反转后的字符串比较）  这步牛逼
    return filtered_str == filtered_str[::-1]


# 测试
print(is_palindrome("A man, a plan, a canal: Panama"))  # 输出: True
print(is_palindrome("race a car"))  # 输出: False

print(is_palindrome("1A1"))  # 输出:True

print(is_palindrome("1 A         1"))  # 输出:True  因为无论多少个空格、空格是否对称，一开始都被过滤掉了 不影响

print("------基础语法测试----------")
# 纯字母
print("Hello".isalnum())  # True

# 纯数字
print("12345".isalnum())  # True

# 字母+数字
print("Hello123".isalnum())  # True

# 包含空格
print("Hello 123".isalnum())  # False（有空格）

# 包含标点符号
print("Hello!123".isalnum())  # False（有感叹号）

# 包含中文（注意：在 Python 中，中文、日文也会被视为“字母”类字符）
print("你好123".isalnum())  # True

# 空字符串
print("".isalnum())  # False（空字符串返回 False）

print("------基础语法测试----------")
print("1".lower())
print(" ".lower()) #不会报错 输出为空
print("Aa".lower())


# isalnum()与其他方法的区别：
# isalpha()：仅判断是否全为字母（含中文等）
# isdigit()：仅判断是否全为数字
# isalnum()：是前两者的结合（字母或数字均可）

# isalnum方法常用于验证输入格式，例如检查用户名、密码是否只包含合法字符（字母和数字）。